home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / amos / eaissu3b.lha / Source_Code / AK_Buttons.AMOS / AK_Buttons.amosSourceCode next >
AMOS Source Code  |  1995-12-30  |  5KB  |  129 lines

  1. ' Quick GUI Button example.
  2.  
  3. ' The buttons are all used on screen, except for the big file-selector 
  4. ' box, and the one above the comment. The up and down gadgets on the box also
  5. ' press. 
  6.  
  7. ' CLICK and _UNCLICK are the procedures which draw the different buttons.
  8.  
  9. ' BUT[Min zone,Max zone] waits for a button to be pressed within the 2 variables 
  10. ' and draws any action, then exits with the button no. in ZNE. 
  11.  
  12. ' Follow the source through for more details.
  13.  
  14. ' If you compile the program, the drawing of the font is speeded up 100%.  
  15.  
  16. Dim FX(60),FXX(60),A(100),B(100),C(100),D(100),TX(100),TY(100),TX$(100)
  17. Dim _MODLIST$(200)
  18.  
  19. Global J$,TEXY,TEXX,BUTTON,A(),B(),C(),D(),POSY,POSX,FX(),FXX()
  20. Global ZNE,TEX$,TX(),TY(),TX$(),TEMP,MN,MX,OX
  21. Global RY,A$,F$,MN$,H$,BUTTON,VAR,_SCREEN
  22.  
  23. Proc PREPFONT
  24.  
  25. Unpack 4 To 0 : Reserve Zone 100
  26. Unpack 5 To 7 : Screen Hide 7 : Screen 0
  27.  
  28. Proc PREPSCREEN
  29. Proc MAIN
  30.  
  31. Procedure _UNCLICK[VAR]
  32.    Ink 0 : Draw A(BUTTON),B(BUTTON) To C(BUTTON),B(BUTTON) : Draw C(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON)
  33.    Ink 2 : Draw A(BUTTON),B(BUTTON) To A(BUTTON),D(BUTTON) : Draw A(BUTTON),D(BUTTON) To C(BUTTON),D(BUTTON)
  34.    If VAR=1
  35.       Set Zone ZNE,A(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON) : Inc ZNE
  36.    End If 
  37. End Proc
  38. Procedure _CLICK[VAR]
  39.    Ink 2 : Draw A(BUTTON),B(BUTTON) To C(BUTTON),B(BUTTON) : Draw C(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON)
  40.    Ink 0 : Draw A(BUTTON),B(BUTTON) To A(BUTTON),D(BUTTON) : Draw A(BUTTON),D(BUTTON) To C(BUTTON),D(BUTTON)
  41.    If VAR=1
  42.       Set Zone ZNE,A(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON) : Inc ZNE
  43.    End If 
  44. End Proc
  45. Procedure PREPSCREEN
  46.    Screen 0
  47.    Cls 15,0,0 To 320,162 : ZNE=1
  48.    DAT:
  49.    Data "load mod",12,6,57,15,19,8,"replay mod",12,17,57,26,15,19,"clear mod",12,28,57,37,17,30
  50.    Data "stop mod",12,39,57,48,19,41,"mod info",12,50,57,59,19,52,"delete file",12,61,57,70,13,63
  51.    Data "screensaver",12,83,57,92,13,85,"online help",12,105,57,114,13,107,"load list",60,6,105,15,66,8,"save list",60,17,105,26,65,19
  52.    Data "clear list",60,28,105,37,63,30,"add to list",60,39,105,48,61,41,"remove",60,50,105,59,71,52,"play track",60,61,105,70,63,63
  53.    Data "next track",60,72,105,81,63,74,"prev track",60,83,105,92,63,85,"last track",60,94,105,103,63,97,"first track",60,105,105,114,61,107
  54.    Data "preferences",108,6,153,15,109,8,"load prefs",108,17,153,26,111,19,"save prefs",108,28,153,37,111,30,"default",108,39,153,48,117,41
  55.    Data "screenshot",108,50,153,59,111,52,"iconify",108,61,153,70,116,63,"quit",108,72,153,81,123,74,"about",108,94,153,103,121,96
  56.    Data "register",108,105,153,114,115,107,"other games",108,116,153,125,109,118,"features",108,127,153,136,115,129," ",0,0,4,4,0,0,"just what the hell am i doing?",5,152,313,160,6,145
  57.    DAT2:
  58.    Data 1,168,5,176,13,2,168,15,176,127,1,168,129,176,137,2,181,5,312,137,2,181,140,313,148
  59.    Restore DAT
  60.    For BUTTON=1 To 31
  61.       Read TX$(BUTTON),A(BUTTON),B(BUTTON),C(BUTTON),D(BUTTON),TX(BUTTON),TY(BUTTON)
  62.       Cls 15,A(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON)
  63.       If BUTTON<31 : Proc _CLICK[0] : End If : If BUTTON=31 : Proc _UNCLICK[0] : End If 
  64.       POSX=TX(BUTTON) : POSY=TY(BUTTON) : TEX$=TX$(BUTTON) : Proc _PUTTEXT[1]
  65.    Next BUTTON
  66.    Restore DAT2 : BUTTON=100
  67.    For N=1 To 5 : Read TYPE,A(100),B(100),C(100),D(100) : Cls 15,A(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON) : If TYPE=1 : Proc _CLICK[0] : End If : If TYPE=2 : Proc _UNCLICK[0] : End If : Next N
  68.    DAT3:
  69.    Data 168,5,176,13,0,0
  70.    Data 168,129,176,137,0,0
  71.    Data 181,140,313,148,183,142
  72.    Restore DAT3
  73.    For BUTTON=47 To 49 : Read A(BUTTON),B(BUTTON),C(BUTTON),D(BUTTON),TX(BUTTON),TY(BUTTON) : Next BUTTON
  74. End Proc
  75. Procedure PREPFONT
  76.    Restore DAT : For N=1 To 55 : Read A : FX(N)=A : FXX(N)=A+3 : Next N
  77.    J$="abcdefghijklmnopqrstuvwxyz0123456789!"+Chr$(34)+"�%&*()?/>.<,@#-=+"
  78.    DAT:
  79.    Data 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80
  80.    Data 84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144
  81.    Data 148,152,156,160,164,168,172,177,182,185,189,193,198,202,206
  82.    Data 210,214,219,223
  83. End Proc
  84. Procedure _PUTTEXT[VAR]
  85.    If VAR=0 : POSX=160-(Len(TEX$)*4)/2 : End If 
  86.    For NN=1 To Len(TEX$) : I$=Mid$(TEX$,NN,1)
  87.       If I$=" " : Goto NXT : End If 
  88.       NUM=Instr(J$,Lower$(I$))
  89.       Screen Copy 7,FX(NUM),1,FXX(NUM),6 To _SCREEN,POSX,POSY
  90.       NXT:
  91.       Add POSX,4
  92.    Next NN
  93. End Proc
  94. Procedure ACTIVATE[MN,MX]
  95.    For BUTTON=MN To MX
  96.       If A(BUTTON)>0 and B(BUTTON)>0 and C(BUTTON)>0 and D(BUTTON)>0
  97.          Set Zone BUTTON,A(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON)
  98.       End If 
  99.       If BUTTON=30
  100.          Set Zone BUTTON,A(BUTTON),B(BUTTON) To C(BUTTON),D(BUTTON)
  101.       End If 
  102.    Next BUTTON
  103. End Proc
  104. Procedure MAIN
  105.    Proc ACTIVATE[1,48]
  106.    TEX$="welcome to mmplay gui version "+VER$+"  awaiting user response."
  107.    Proc STATUS
  108.    Do 
  109.       Proc BUT[1,48]
  110.       TEX$="YOU JUST SO HAPPENED TO PRESS BUTTON NO."+Str$(ZNE)
  111.       Proc STATUS
  112.    Loop 
  113. End Proc
  114. Procedure STATUS
  115.    Cls 15,6,153 To 312,159
  116.    POSY=154 : Proc _PUTTEXT[0]
  117. End Proc
  118. Procedure BUT[MN,OX]
  119.    Do 
  120.       Limit Mouse : Multi Wait 
  121.       K=Mouse Key : Z=Mouse Zone
  122.       If Z>(MN-1) and K=1 and Z<(OX+1)
  123.          BUTTON=Z : Proc _UNCLICK[0] : Repeat : Multi Wait : L=Mouse Zone : M=Mouse Key : Until M=0 or L=0 or L<>Z
  124.          If L<>Z and M=1 : Proc _CLICK[0] : Goto LP : End If 
  125.          If Z<>0 and M=0 : Proc _CLICK[0] : ZNE=Z : ZN=0 : Exit : End If 
  126.       End If 
  127.       LP:
  128.    Loop 
  129. End Proc